<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title>错误和消息</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="SECT1">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="plpgsql-cursors.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="plpgsql.html">快退</a></td><td width="60%" align="center" valign="bottom">章37. PL/pgSQL - SQL 过程语言</td><td width="10%" align="right" valign="top"><a href="plpgsql.html">快进</a></td><td width="10%" align="right" valign="top"><a href="plpgsql-trigger.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<div class="SECT1"><h1 class="SECT1"><a name="PLPGSQL-ERRORS-AND-MESSAGES">37.9. 错误和消息</a></h1><a name="AEN40468"></a><a name="AEN40470"></a>
<p>利用 <tt class="COMMAND">RAISE</tt> 语句报告信息以及抛出错误。</p>
<pre class="SYNOPSIS">RAISE <tt class="REPLACEABLE"><i>level</i></tt> '<tt class="REPLACEABLE"><i>format</i></tt>' [<span class="OPTIONAL">, <tt class="REPLACEABLE"><i>expression</i></tt> [<span class="OPTIONAL">, ...</span>]</span>];</pre>
<p>可能的级别有 <tt class="LITERAL">DEBUG</tt>(向服务器日志写信息), <tt class="LITERAL">LOG</tt>(向服务器日志写信息，优先级更高), <tt class="LITERAL">INFO</tt>, <tt class="LITERAL">NOTICE</tt>, <tt class="LITERAL">WARNING</tt>(把信息写到服务器日志以及转发到客户端应用，优先级逐步升高), <tt class="LITERAL">EXCEPTION</tt>(抛出一个错误，通常退出当前事务)。某个优先级别的信息是报告给客户端还是写到服务器日志，还是两个都做是由 <a href="runtime-config-logging.html#GUC-LOG-MIN-MESSAGES">log_min_messages</a> 和 <a href="runtime-config-logging.html#GUC-CLIENT-MIN-MESSAGES">client_min_messages</a> 配置变量控制的。参阅<a href="runtime-config.html">章17</a>获取更多细节。</p>
<p>在格式字符串里，<tt class="LITERAL">%</tt> 被下一个可选参数的外部表现形式代替。要表示 <tt class="LITERAL">%</tt> 字符必须双写(<tt class="LITERAL">%%</tt>)。参数可以是简单的变量或者表达式，而格式必须是一个简单的字符串文本。</p>
<p>在这个例子里，<tt class="LITERAL">v_job_id</tt> 的值将代替字符串中的 <tt class="LITERAL">%</tt> ：</p>
<pre class="PROGRAMLISTING">RAISE NOTICE 'Calling cs_create_job(%)', v_job_id;</pre>
<p>这个例子将会带着给出的错误信息退出事务：</p>
<pre class="PROGRAMLISTING">RAISE EXCEPTION 'Nonexistent ID --&#62; %', user_id;</pre>
<p><tt class="COMMAND">RAISE EXCEPTION</tt> 目前总是生成同样的 <tt class="VARNAME">SQLSTATE</tt> 代码(<tt class="LITERAL">P0001</tt>)，不管调用它的信息是什么。可以用 <tt class="LITERAL">EXCEPTION ... WHEN RAISE_EXCEPTION THEN ...</tt> 捕获这样的异常，但是无法从一个 <tt class="COMMAND">RAISE</tt> 里告诉另外一个相关的状态。</p>
</div>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="plpgsql-cursors.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="plpgsql-trigger.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top">游标</td><td width="34%" align="center" valign="top"><a href="plpgsql.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">触发器过程</td></tr>
</table>
</div>
</body></html>